package com.csi.bumblebee.controller;

import com.csi.bumblebee.domain.util.MyResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.Date;

import static com.csi.bumblebee.domain.util.StateCode.*;

/**
 * 异常信息拦截和记录
 *
 * @author HUOJT
 */
@RestControllerAdvice
public class MyExceptionHandler {

    /**
     * 日志
     */
    private static final Logger logger = LoggerFactory.getLogger(MyExceptionHandler.class);

    /**
     * 捕捉运行时异常
     *
     * @param e 运行时异常对象
     * @return json结果
     */
    @ExceptionHandler(RuntimeException.class)
    public MyResult<RuntimeException> handleRuntimeException(RuntimeException e) {

        // 记录日志
        writeLogger(e);

        // json返回
        MyResult<RuntimeException> myResult = new MyResult<>();
        myResult.setData(e);
        myResult.setCode(RUN_EXCEPTION);
        myResult.setMessage("出现运行时异常");
        return myResult;

    }

    /**
     * 记录日志
     *
     * @param e 异常对象
     */
    private void writeLogger(Exception e) {
        logger.error("异常或报错信息（开始）---------------------");
        logger.error("时间： " + new Date());
        logger.error("异常： " + e.toString());
        logger.error("定位： " + e.getStackTrace()[0].toString());
        logger.error("异常或报错信息（结束）---------------------");
    }

}

